Message processing applications and/or services such as database-driven trading engines (e.g. to match incoming orders against those being in an order book) or web-based booking applications (e.g. for online seat booking of a large airline) may in general refer to applications and/or services having a high volume throughput of messages, i.e. a high number of incoming messages has to be (automatically) processed. Additionally, an underlying storage system such as a database (e.g. storing an order book or a seat availability situation of a plurality of flights performed by an airline) has to be adjusted to modifications and/or changes (e.g. the order book according to received orders or the booking application according to the current seat availability situation) in view of the processed incoming messages and/or requests.
In particular, computer-implemented message processing applications and/or services have a high number of incoming messages and/or requests that need to be (automatically) processed, i.e. the applications and/or services have a high (messages) throughput. According to such applications, processing results of the incoming messages have impact on how subsequent messages will be processed. Furthermore, the way a (incoming) message has been processed and the impact that the processed message has on the context data of an application and/or a service (e.g. the current state of an order book, wherein the context data of the order book may be changed according to incoming orders) need to be retrieved and/or analyzed at some later state. Additionally, the context data of an application and/or service need to be persistent, i.e. in case of a failure, the application and/or service should be able to reconstruct its context data to the state after the last successfully processed message.
Unfortunately, there might be a bottleneck between an optimized high throughput (of processed messages per time unit) and persistence of a message processing application and/or service. On the one hand, high throughput may be best achieved with pure memory operations. On the other hand, persistence requires rather expensive database transactions in order to ensure data integrity.